Add gdk_set_pointer_hooks() to allow pointer-querying to be hooked by an
authorOwen Taylor <otaylor@redhat.com>
Thu, 5 Jul 2001 13:41:34 +0000 (13:41 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Thu, 5 Jul 2001 13:41:34 +0000 (13:41 +0000)
Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>

  * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
  gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
  Add gdk_set_pointer_hooks() to allow pointer-querying to
  be hooked by an event record/playback system like GERD.
(#56914)

13 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gdk/gdkinternals.h
gdk/gdkwindow.c
gdk/gdkwindow.h
gdk/linux-fb/gdkwindow-fb.c
gdk/win32/gdkwindow-win32.c
gdk/x11/gdkwindow-x11.c

index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index c91442e8ebbfb2b045eca2de10a197ec3a921866..7598feba52905a40e40798de58ea3df522c27d53 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul  2 01:09:37 2001  Owen Taylor  <otaylor@redhat.com>
+       * gdk/gdkwindow.[ch] gdk/gdkinternals.h gdk/x11/gdkwindow-x11.c
+       gdk/linux-fb/gdkwindow-fb.c gdk/x11/gdkwindow-x11.c gdk/gdk:
+       Add gdk_set_pointer_hooks() to allow pointer-querying to
+       be hooked by an event record/playback system like GERD.
+       (#56914)
+       
 Thu Jul  5 08:57:07 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.c (gtk_widget_reset_rc_style): Pass
index fbcf34658a050e245b182a4943fb0f2bb9117ddc..e90758e066737ea9279e0fb51afee98b0c342258 100644 (file)
@@ -159,6 +159,13 @@ void     _gdk_windowing_window_clear_area_e     (GdkWindow  *window,
                                                 gint        width,
                                                 gint        height);
 
+GdkWindow* _gdk_windowing_window_at_pointer  (gint            *win_x,
+                                             gint            *win_y);
+GdkWindow* _gdk_windowing_window_get_pointer (GdkWindow       *window,
+                                             gint            *x,
+                                             gint            *y,
+                                             GdkModifierType *mask);
+
 #define GDK_WINDOW_IS_MAPPED(window) ((((GdkWindowObject*)window)->state & GDK_WINDOW_STATE_WITHDRAWN) == 0)
 
 /* Called before processing updates for a window. This gives the windowing
index 81c919bab1b6316abc52944bb27b523451fa5670..59183b204f5b694de868e1337f09b8cf8aa2ec45 100644 (file)
@@ -42,6 +42,14 @@ struct _GdkWindowPaint
   gint x_offset;
   gint y_offset;
 };
+
+static const GdkPointerHooks default_pointer_hooks = {
+  _gdk_windowing_window_get_pointer,
+  _gdk_windowing_window_at_pointer
+};
+
+const GdkPointerHooks *current_pointer_hooks = &default_pointer_hooks;
+
 static GdkGC *gdk_window_create_gc      (GdkDrawable     *drawable,
                                          GdkGCValues     *values,
                                          GdkGCValuesMask  mask);
@@ -2279,3 +2287,48 @@ gdk_window_constrain_size (GdkGeometry *geometry,
   *new_width = width;
   *new_height = height;
 }
+
+/**
+ * gdk_set_pointer_hooks:
+ * @new_hooks: a table of pointer to functions for getting
+ *   quantities related to the current pointer position,
+ *   or %NULL to restore the default table.
+ * 
+ * This function allows for hooking into the operation
+ * of getting the current location of the pointer. This
+ * is only useful for such low-level tools as an
+ * event recorder. Applications should never have any
+ * reason to use this facility
+ * 
+ * Return value: the previous pointer hook table
+ **/
+GdkPointerHooks *
+gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks)
+{
+  const GdkPointerHooks *result = current_pointer_hooks;
+
+  if (new_hooks)
+    current_pointer_hooks = new_hooks;
+  else
+    current_pointer_hooks = &default_pointer_hooks;
+
+  return (GdkPointerHooks *)result;
+}
+
+GdkWindow*
+gdk_window_get_pointer (GdkWindow        *window,
+                       gint              *x,
+                       gint              *y,
+                       GdkModifierType *mask)
+{
+  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
+  
+  return current_pointer_hooks->get_pointer (window, x, y, mask); 
+}
+
+GdkWindow*
+gdk_window_at_pointer (gint *win_x,
+                      gint *win_y)
+{
+  return current_pointer_hooks->window_at_pointer (win_x, win_y);
+}
index d13c5acb0884f2378ff4f45877943a595a9eb00d..6ea64594a48add5d7494ee95cf4c5a2202514dda 100644 (file)
@@ -12,6 +12,7 @@ extern "C" {
 
 typedef struct _GdkGeometry           GdkGeometry;
 typedef struct _GdkWindowAttr        GdkWindowAttr;
+typedef struct _GdkPointerHooks              GdkPointerHooks;
 
 /* Classes of windows.
  *   InputOutput: Almost every window should be of this type. Such windows
@@ -195,6 +196,16 @@ struct _GdkGeometry
   GdkGravity win_gravity;
 };
 
+struct _GdkPointerHooks 
+{
+  GdkWindow* (*get_pointer)       (GdkWindow      *window,
+                                  gint            *x,
+                                  gint            *y,
+                                  GdkModifierType *mask);
+  GdkWindow* (*window_at_pointer) (gint            *win_x,
+                                   gint            *win_y);
+};
+
 typedef struct _GdkWindowObject GdkWindowObject;
 typedef struct _GdkWindowObjectClass GdkWindowObjectClass;
 
@@ -496,6 +507,8 @@ void       gdk_window_constrain_size      (GdkGeometry  *geometry,
                                            gint         *new_width,
                                            gint         *new_height);
 
+GdkPointerHooks *gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks);   
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index e5d4154753084f3dda7cd4c7aa070dd6c55813b7..62054129b138eee09944c25f7d5d8c6abf45108a 100644 (file)
@@ -1602,10 +1602,10 @@ gdk_window_fb_get_visible_region (GdkDrawable *drawable)
 }
 
 GdkWindow *
-gdk_window_get_pointer (GdkWindow       *window,
-                       gint            *x,
-                       gint            *y,
-                       GdkModifierType *mask)
+_gdk_windowing_window_get_pointer (GdkWindow       *window,
+                                  gint            *x,
+                                  gint            *y,
+                                  GdkModifierType *mask)
 {
   GdkWindow *return_val;
   int winx = 0;
@@ -1686,8 +1686,8 @@ gdk_window_get_pointer (GdkWindow       *window,
 }
 
 GdkWindow*
-gdk_window_at_pointer (gint *win_x,
-                      gint *win_y)
+_gdk_windowing_window_at_pointer (gint *win_x,
+                                 gint *win_y)
 {
   gint rx, ry;
   GdkWindow *retval = gdk_window_get_pointer (NULL, win_x, win_y, NULL);
index 449418cd5a7ed1c1c054bdad19b397a6d03f184d..c6205b8350502814e33dd81032485d2fc421e4a6 100644 (file)
@@ -1739,10 +1739,10 @@ gdk_window_get_frame_extents (GdkWindow    *window,
 }
 
 GdkWindow*
-gdk_window_get_pointer (GdkWindow       *window,
-                       gint            *x,
-                       gint            *y,
-                       GdkModifierType *mask)
+_gdk_windowing_window_get_pointer (GdkWindow       *window,
+                                  gint            *x,
+                                  gint            *y,
+                                  GdkModifierType *mask)
 {
   GdkWindow *return_val;
   POINT pointc, point;
@@ -1801,8 +1801,8 @@ gdk_window_get_pointer (GdkWindow       *window,
 }
 
 GdkWindow*
-gdk_window_at_pointer (gint *win_x,
-                      gint *win_y)
+_gdk_windowing_window_at_pointer (gint *win_x,
+                                 gint *win_y)
 {
   GdkWindow *window;
   POINT point, pointc;
@@ -2505,4 +2505,4 @@ gdk_window_begin_move_drag (GdkWindow *window,
     return;
 
   /* XXX: isn't all this default on win32 ... */  
-}
\ No newline at end of file
+}
index 9f8aebaa98ee430bfe2cf8f6b02f06c974067dc7..450644e9a4843ee3fe3b5abc80c3fd21a7d8f358 100644 (file)
@@ -1976,10 +1976,10 @@ gdk_window_get_frame_extents (GdkWindow    *window,
 }
 
 GdkWindow*
-gdk_window_get_pointer (GdkWindow       *window,
-                       gint            *x,
-                       gint            *y,
-                       GdkModifierType *mask)
+_gdk_windowing_window_get_pointer (GdkWindow       *window,
+                                  gint            *x,
+                                  gint            *y,
+                                  GdkModifierType *mask)
 {
   GdkWindow *return_val;
   Window root;
@@ -2018,8 +2018,8 @@ gdk_window_get_pointer (GdkWindow       *window,
 }
 
 GdkWindow*
-gdk_window_at_pointer (gint *win_x,
-                      gint *win_y)
+_gdk_windowing_window_at_pointer (gint *win_x,
+                                 gint *win_y)
 {
   GdkWindow *window;
   Window root;